package com.company.controller;

import com.company.bean.UserInfoBean;
import com.company.service.IUserService;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.mvc.condition.RequestConditionHolder;

import javax.annotation.Resource;
import javax.servlet.ServletRequestEvent;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

@Controller
public class UserController {

    //依赖注入
    @Resource
    private IUserService userService;
    @Resource
    HttpServletRequest request;

    /**
     * 进行后台的跳转
     *
     * @param pg 跳转的视图名
     * @return 目标跳转的路径
     */
    @RequestMapping("/jump")
    public String jump(String pg) {
        return pg;
    }

    /**
     * 用户添加信息保存
     *
     * @param userInfoBean 参数实体类
     * @return 返回操作结果
     */
    @RequestMapping("/addAndUpdateUserInfo")
    public String addAndUpdateUserInfo(UserInfoBean userInfoBean){
        //调用service层
        int i  = userService.addAndUpdateUserInfo(userInfoBean);
        if (i>0){
            //保存成功
            return "userinfo/UserInfoAddDetail";
        }
       else {
           //保存失败
            return "userinfo/UserInfoAdd";
        }
    }


    @RequestMapping("/login")
    //当表单属性值与内部属性名不一样时用@RequestParam
    public  String doLogin(@RequestParam("username") String userName,
                           @RequestParam("userpsw") String userPsw){

            System.out.println("正在进行登录操作:用户名："+userName+"：密码："+userPsw);
        //返回的视图的路径src/main/webapp/WEB-INF/pages/logined.jsp
        //通过springMVC的视图解析器:会自动附加 前缀WEB-INF/pages/和后缀.jsp,所以只需要返回中间部分的即可

        request.getSession().setAttribute("userLoginedName",userName);


        return "logined";
    }


    @RequestMapping("/login2")
    public String doLogin2(UserInfoBean userInfo) {
        System.out.println("正在进行登录操作:" + userInfo.getUsername() + ";密码：" + userInfo.getUserpsw());
        // 调用service层进行业务逻辑处理
        boolean canLogin = userService.doLogin(userInfo);
        // 根据查询结果集进行跳转
        if (canLogin) {
            // 登录成功
            // 返回的视图的路径：WEB-INF/pages/logined.jsp
            // 通过springmvc的视图解析器：会自动附加 前缀 /WEB-INF/pages/ 和后缀 .jsp，所以只需要返回中间部分即可；
            HttpServletRequest request1 = ((ServletRequestAttributes)
                    RequestContextHolder.getRequestAttributes()).getRequest();

            request1.setAttribute("userLoginedName",userInfo.getUsername());
            return "logined";
        }else{
            // 登录失败，跳回登录页面
            return "../../index";
        }
    }





    /**
     *使用ModelAndVie获取用户信息
     *
     * @param userInfo
     * @return
     */
    @RequestMapping("/login3")
    public ModelAndView doLogin3(UserInfoBean userInfo) {
        //创建一个一个返回对象
        ModelAndView mov = new ModelAndView();//进行传值

        System.out.println("正在进行登录操作:" + userInfo.getUsername() + ";密码：" + userInfo.getUserpsw());
        // 调用service层进行业务逻辑处理
        boolean canLogin = userService.doLogin(userInfo);
        // 根据查询结果集进行跳转
        if (canLogin) {
            // 登录成功
            // 返回的视图的路径：WEB-INF/pages/logined.jsp
            // 通过springmvc的视图解析器：会自动附加 前缀 /WEB-INF/pages/ 和后缀 .jsp，所以只需要返回中间部分即可；
            //设置返回的视图
            mov.setViewName("logined");
            //使用Model进行数据缓存
            System.out.println("缓存的数据："+userInfo.getUsername());
            mov.addObject("userLoginedName",userInfo.getUsername());
        }else{
            // 登录失败，跳回登录页面
            mov.setViewName("../../index");

        }
        //返回值
        return  mov;

    }

    /**
     * 使用ModelAndView的方法进行request缓存数据
     * @param userInfo
     * @return
     */
    @RequestMapping("/login4")
    public String doLogin4(UserInfoBean userInfo, HttpServletRequest request) {

        System.out.println("正在进行 登录操作:" + userInfo.getUsername() + ";密码：" + userInfo.getUserpsw());
        // 调用service层进行业务逻辑处理
        boolean canLogin = userService.doLogin(userInfo);
        // 根据查询结果集进行跳转
        if (canLogin) {
            // 登录成功
            // 返回的视图的路径：WEB-INF/pages/logined.jsp
            // 通过springmvc的视图解析器：会自动附加 前缀 /WEB-INF/pages/ 和后缀 .jsp，所以只需要返回中间部分即可；
            //设置返回的视图名字
            //使用Model进行数据缓存
            System.out.println("缓存的数据："+userInfo.getUsername());
            request.getSession().setAttribute("userLoginedName",userInfo.getUsername());
            return "logined";

        }else{
            // 登录失败，跳回登录页面
           return "../../index";
        }
    }


    public IUserService getUserService() {
        return userService;
    }

    public void setUserService(IUserService userService) {
        this.userService = userService;
    }


}
